// Functor  函子

//函子
//class 使用的是构造函数来模拟类
// class Container {
//     //constructor 用于初始化class并创建一个对象
//     constructor (value) {
//         this._value = value;
//     }

//     map (fn) {
//         return new Container(fn(this._value));
//     }
// }

// let r = new Container(5)
//     .map(x => x+1)     //返回新的函子对象
//     .map(x => x*x) 

// console.log(r);

//简化new
//其内部值永远不取  通过内部方法对值进行相关操作
class Container {
    //静态方法 of 用于封装new  返回一个函数对象
    static of (value) {
        return new Container(value);
    }

    //constructor 用于初始化class并创建一个对象
    constructor (value) {
        this._value = value;
    }
    
    map (fn) {
        return Container.of(fn(this._value));
    }
}

//链式编程
// let r = Container.of(5)
//             .map(x => x + 2)
//             .map(x => x * x)

// console.log(r);


//当传入值为null  演示 null / undefined 的问题
Container.of(null)
    //此时传入null 无输出 使得函数不纯  这是副作用
    .map(x => x.toUpperCase());

